package wrappers

import (
	"fmt"
	"time"
)

type IADD func(float64, float64) float64

func Add(x, y float64) float64 {
	return x + y
}

func Wrapper(fun IADD) IADD {
	// 第一层  实现了return IADD
	return func(a float64, b float64) float64 {

		// 第二层 定义了fn
		fn := func(a float64, b float64) (result float64) {
			t1 := time.Now()
			fmt.Println("开始了")
			time.Sleep(time.Second)
			defer func() { fmt.Println("结束了", result, time.Since(t1)) }()
			return fun(a, b)
		}

		// 第二层 return fn 实现了第一层的 return func(a float64, b float64) float64 {
		return fn(a, b)
	}

}
